import { ConfigEnv, defineConfig, loadEnv, UserConfig } from 'vite'
import react from '@vitejs/plugin-react'
import compression from 'vite-plugin-compression'
import path from 'path'

// https://vite.dev/config/
export default defineConfig((mode: ConfigEnv): UserConfig => {
  const viteEnv = loadEnv(mode.mode, process.cwd()) /// 获取 .env 文件中的配置；
  // console.log(viteEnv, 'env')

  return {
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src')
      }
    },
    server: {
      host: '0.0.0.0', /// 允许外部访问；
      port: Number(viteEnv.VITE_PORT),
      open: JSON.parse(viteEnv.VITE_OPEN),
      proxy: {
        [viteEnv.VITE_API_BASE_URL]: {
          target: viteEnv.VITE_API_URL,
          changeOrigin: true,
          rewrite: path => path.replace(new RegExp(`^${viteEnv.VITE_API_BASE_URL}`), '')
        }

        // '/api': {
        //   target: 'http://localhost:3000',
        //   changeOrigin: true,
        //   rewrite: path => path.replace(new RegExp(`^/api`), '')
        // }
      }
    },
    build: {
      outDir: 'dist', /// 打包输出目录；
      // minify: 'terser', /// 打包压缩方式，可选 'terser' 或 'esbuild'；
      // terserOptions: {
      //   compress: {
      //     drop_console: JSON.parse(viteEnv.VITE_CONSOLE), /// 去除 console
      //     drop_debugger: true /// 去除 debugger
      //   }
      // }
      minify: 'esbuild',
      rollupOptions: {
        output: {
          chunkFileNames: 'assets/js/[name]-[hash].js',
          entryFileNames: 'assets/js/[name]-[hash].js',
          assetFileNames: 'assets/[ext]/[name]-[hash].[ext]'
        }
      }
    },
    plugins: [
      react(),
      compression({
        disable: !JSON.parse(viteEnv.VITE_GZIP), /// 是否禁用压缩；
        filter: /\.(js|css|html|svg)$/, /// 过滤器，只压缩指定的文件类型；
        threshold: 1024, /// 文件大小阈值，只有大于该阈值的文件才会被压缩；
        algorithm: 'gzip', /// 压缩算法，可选 'gzip' 或 'brotliCompress'；
        ext: '.gz', /// 压缩后的文件后缀；
        deleteOriginFile: false, /// 是否删除源文件；
        verbose: true /// 是否在控制台输出压缩结果；
      })
    ]
  }
})
